package com.hb.G_协程.C_取消与超时

import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

fun main()= runBlocking {
    //launch方法返回一个Job
    val job=GlobalScope.launch {
        delay(1000)// 非阻塞的等待 1 秒钟（默认时间单位是毫秒）
        println("kotlin coroutines")// 在延迟后打印输出
    }
    println("hello")//协程已在等待时主线程还在继续

    /**
     * 暂停协程，直到此作业完成。 当作业出于任何原因完成并且调用协程的Job仍处于活动状态时，此调用将正常恢复（无例外）。 如果作业仍处于新状态，则此功能还会启动相应的协程。
    请注意，只有在其所有子级都完成后，作业才能完成。
    该挂起功能是可以取消的，并且始终检查调用的协程的Job是否取消。 如果在调用此挂起功能时或在挂起该协程时取消或完成了调用协程的Job ，则此函数将引发CancellationException 。
    特别是，它意味着父协同程序调用join上使用开始子女协同程序launch(coroutineContext) { ... }建设者抛出CancellationException如果孩子已经坠毁，除非非标准CoroutineExceptionHandler安装在上下文。
    此函数可用于通过onJoin子句进行选择调用。 使用isCompleted无需等待即可检查此作业的完成。
    有cancelAndJoin函数，该函数结合了cancel和join的调用
     */
    job.join()//等待那个调用join的job的协程完成
    println("world")
}